package com.tengol.demo.design.pattern.creational.simplefactory;

/**
 * VideoFactory
 *
 * @author dongrui
 * @date 2019/02/28
 */
public class VideoFactory {
    /**
     * 根据类型判断生产对应的产品，既可以使用if判断，也可以使用switch判断。
     * 适用于需要生产的产品比较少，并且比较固定的业务场景，若产品多且容易变化，则不适用。
     */
    public Video getVideo(String videoType){
        if("java".equalsIgnoreCase(videoType.trim())){
            return new JavaVideo();
        }else if("python".equalsIgnoreCase(videoType.trim())){
            return new PythonVideo();
        }else{
            System.out.println("未获取到名为" + videoType + "的课程视频！");
            return null;
        }
    }

    /**
     * 使用反射技术实现生产对应产品的功能，某些业务场景下更为灵活。
     */
    public static Video getVideoByReflection(String clazzName) throws Exception {
        if(clazzName != null && !clazzName.trim().equals("")){
            Class<?> aClass = Class.forName(clazzName);
            return (Video) aClass.newInstance();
        }else{
            System.out.println("获取视频失败！");
            return null;
        }
    }
}
